# 指定基础镜像，这是多阶段构建的前期阶段
FROM registry.cn-hangzhou.aliyuncs.com/qingyan/openjdk:8-alpine as builder
MAINTAINER QINGYAN
LABEL description="无"

ARG JAR_FILE=ruoyi-admin/target/ruoyi-admin.jar
# 指定工作目录，目录不存在会自动创建
WORKDIR app
# 将生成的 jar 复制到容器镜像中
COPY ${JAR_FILE} app.jar
# 通过工具spring-boot-jarmode-layertools从application.jar中提取拆分后的构建结果
RUN java -Djarmode=layertools -jar app.jar extract && rm app.jar

# 正式构建镜像
FROM registry.cn-hangzhou.aliyuncs.com/qingyan/openjdk:8-alpine
WORKDIR app
# 前一阶段从jar中提取除了多个文件，这里分别执行COPY命令复制到镜像空间中，每次COPY都是一个layer
COPY --from=builder app/dependencies/ ./
COPY --from=builder app/snapshot-dependencies/ ./
COPY --from=builder app/spring-boot-loader/ ./
COPY --from=builder app/application/ ./

# 指定时区（我的基础镜像已经修改过时区了，这步可以省略）
#ENV TZ="Asia/Shanghai"
#RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 不sleep的话前面的构建会失败
RUN sleep 3;
#
#ADD apache-skywalking-java-agent-8.10.0.tar /

EXPOSE 80
ENV JVM_OPS="-Djava.security.egd=file:/dev/./urandom -Xms512m -Xmx512m -Xmn180m -XX:MetaspaceSize=240m -XX:MaxMetaspaceSize=240m -Xss256k"
ENV JAVA_OPS="-Dserver.port=80"
#CMD ["--server.port=8070"] 使用这种构建方式，后置Spring配置是无效的。可以在JAVA_OPS中使用Java配置覆盖
ENTRYPOINT ["sh","-c","java $JVM_OPS $JAVA_OPS org.springframework.boot.loader.JarLauncher"]
